export function getMonth(){
    const months: string[] = [];
    const date = new Date();
    
    for (let i = 0; i < 12; i++) {
        const year = date.getFullYear();
        const month = (date.getMonth() + 1).toString().padStart(2, '0'); // 月份从0开始，所以要加1
        months.push(`${year}-${month}`);
        
        // 将日期设置为上个月
        date.setMonth(date.getMonth() - 1);
    }
    
    return months;
}



  // 使用示例==获取当前年月日
  //console.log(getCurrentDateFormatted()); // 输出类似 "2023-09-20"
export function getCurrentDateFormatted(): string {
    const today = new Date();
    const year = today.getFullYear();
    const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从0开始需+1
    const day = String(today.getDate()).padStart(2, '0');
    return `${year}-${month}-${day}`;
  }
  

// 获取当前日期的前一日日期
// 示例用法
// console.log(getPreviousDay()); // 输出前一天的日期，如20231004
export  function getPreviousDay(): string {
    const date = new Date();
    date.setDate(date.getDate() - 1); // 减去一天
    
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始，补零
    const day = String(date.getDate()).padStart(2, '0'); // 日期补零
    
    return `${year}${month}${day}`;
}


// 示例输出：20250411 15:23:45（假设当前时间为 2025-04-11 23:15:45）
// console.log(formatCurrentDateTime());

export function formatCurrentDateTime(): string {
  const date = new Date();
  // 日期部分处理（yyyymmdd）
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');

  // 时间部分处理（mm:hh:ss）
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');

  const seconds = String(date.getSeconds()).padStart(2, '0');

  return `${year}${month}${day} ${hours}:${minutes}:${seconds}`;
  // return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
//dxq-改can需要
export function formatCurrentDateTimeNew(): string {
  const date = new Date();
  // 日期部分处理（yyyymmdd）
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');

  // 时间部分处理（mm:hh:ss）
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');

  const seconds = String(date.getSeconds()).padStart(2, '0');

  // return `${year}${month}${day} ${hours}:${minutes}:${seconds}`;
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

// 获取当前日的前12个月日期， 示例输出（假设当前日期为2023-10-05）：
// ["20221005", "20221105", ..., "20230905"]
// console.log(getLast12MonthsDates());
// 过去12个月的同一天‌（若该日不存在则取当月最后一天）
export function getLast12MonthsDates(): string[] {
  const currentDate = new Date();
  const dates: string[] = [];
  
  for (let i = 1; i <= 12; i++) {
      const tempDate = new Date(currentDate);
      // 计算目标月份
      const targetMonth = tempDate.getMonth() - i;
      tempDate.setMonth(targetMonth);

      // 计算预期的年份和月份
      const expectedYear = currentDate.getFullYear() + Math.floor((currentDate.getMonth() - i) / 12);
      const expectedMonth = (currentDate.getMonth() - i + 12) % 12;

      // 检查是否因日期无效导致月份被调整（例如 3月31日 → 2月28日）
      if (
          tempDate.getFullYear() !== expectedYear ||
          tempDate.getMonth() !== expectedMonth
      ) {
          // 设置为目标月份的最后一天
          tempDate.setFullYear(expectedYear, expectedMonth + 1, 0);
      }

      // 格式化并存储
      dates.push(formatDate(tempDate));
  }

  return dates.reverse(); // 按从旧到新排序
}

// 格式化日期为 yyyymmdd
function formatDate(date: Date): string {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, "0");
  const day = String(date.getDate()).padStart(2, "0");
  return `${year}${month}${day}`;
}


/**
 * 获取日期
 * 可选参数：yyyy yyyy-MM、 yyyy-MM-dd、 yyyy-MM-dd HH、 yyyy-MM-dd HH:mm、yyyy-MM-dd HH:mm:ss
 */
export function getCurrentDate(format: string): string {
  const date = new Date();

  const padZero = (num: number, len = 2) => num.toString().padStart(len, '0');

  const replacements: Record<string, string> = {
    yyyy: date.getFullYear().toString(),
    MM: padZero(date.getMonth() + 1),
    dd: padZero(date.getDate()),
    HH: padZero(date.getHours()),
    mm: padZero(date.getMinutes()),
    ss: padZero(date.getSeconds()),
  };

  return format.replace(/yyyy|MM|dd|HH|mm|ss/g, match => replacements[match]);
}


/**
 * 日期格式化
 * 参数：'20250526', 'yyyy-MM-dd'; // "2025-05-26"
 * 参数：'20250526', 'yyyy-MM';    // "2025-05"
 * 参数：'20250526', 'yyyy';       // "2025"
 * 参数：'2025', 'yyyy-MM-dd';     // "2025-01-01"
 * 参数：'202505', 'yyyy-MM-dd';   // "2025-05-01"
 */
export function formatCompactDate(dateStr: string, format: string): string {
  if (!/^\d{4,8}$/.test(dateStr)) {
    throw new Error('Invalid date string. Must be 4 to 8 digits like "2025", "202505", or "20250526".');
  }

  const year = dateStr.slice(0, 4);
  const month = dateStr.length >= 6 ? dateStr.slice(4, 6) : '01';
  const day = dateStr.length >= 8 ? dateStr.slice(6, 8) : '01';

  const replacements: Record<string, string> = {
    yyyy: year,
    MM: month,
    dd: day,
  };

  return format.replace(/yyyy|MM|dd/g, token => replacements[token] || '');
}




  